package com.example.mylibrary.network

import retrofit2.Call
import retrofit2.Callback
import retrofit2.Response


abstract class BaseCallBack<T : BaseData> : Callback<T> {

    override fun onResponse(call: Call<T>, response: Response<T>) {
        try {
            val body = response.body()
            // 针对各种请求结果状态来判断不同的情况(取决于后台的设置状态)
            // 下面只处理一种情况 0 参数错误 1 正常数据 -1 登录超时
            when (body?.code) {
                0 -> {
                    // 请求数据异常，将异常信息填充到异常中
                    onFailure(call, IllegalAccessException(body.msg))
                }

                200 -> {
                    // 正常返回数据状态，将数据传递过去
                    onSuccess(body)
                }

                -1 -> {
                    // 登录超时,将错误信息添加到异常中返回错误状态
                    onFailure(call, IllegalAccessException(body.msg))
                }
            }
        } catch (e: Exception) {
            // 如果有异常,将异常推到异常结果中
            e.printStackTrace()
            e.cause?.let { onFailure(call, it) }
        }
    }

    override fun onFailure(call: Call<T>, t: Throwable) {
        // 请求中的所有异常都在这里处理
        t.printStackTrace()
        t.cause?.let { onFailure(call, it) }
    }

    abstract fun onSuccess(body: T)
}